#ifndef METADATAARCHIVO_H
#define METADATAARCHIVO_H

#include "SepararString.h"
#include "FileDateModification.h"
#include <vector>

class MetadataArchivo{

public:

	std::string nombreArchivo, hash, hashViejo;
	FileDateModification fechaModificacion;
	bool f;

	MetadataArchivo():f(true){}

	MetadataArchivo(std::string metadata):f(false){

		// Parsea los parametros.
		std::vector<string> vec;
		separarString(metadata, ' ', vec);

		nombreArchivo = vec[0];	
		hash = vec[1];
		hashViejo = vec[2];
		stringstream aux(vec[3]);
		aux >> fechaModificacion;
	}

	MetadataArchivo(std::string nombreArch, std::string h, std::string hv, std::string fecha):f(false){
		nombreArchivo = nombreArch;
		hash = h;
		hashViejo = hv;
		stringstream aux(fecha);
		aux >> fechaModificacion;
	}

	bool fail(){return f;}

	int compararConNombre(std::string &nombre){
		return nombreArchivo.compare(nombre);
	}

	int compararConNombre(MetadataArchivo &data){
		return nombreArchivo.compare(data.nombreArchivo);
	}

	int compararConHash(std::string &h){
		return hash.compare(h);
	}

	int compararConHash(MetadataArchivo &data){
		return hash.compare(data.hash);
	}

	int compararConHashViejo(std::string &h){
		return hashViejo.compare(h);
	}

	int compararConHashViejo(MetadataArchivo &data){
		return hashViejo.compare(data.hashViejo);
	}

	int compararConFecha(FileDateModification &fecha){
		return fechaModificacion.compare(fecha);
	}

	int compararConFecha(MetadataArchivo &data){
		return fechaModificacion.compare(data.fechaModificacion);
	}

	friend std::ostream& operator<<(std::ostream &o,const MetadataArchivo &data){
		o << data.nombreArchivo << " " << data.hash << " " << data.hashViejo << " " << data.fechaModificacion;
		return o;
	}

	std::string getFileInfo(){
		std::stringstream fileInfo;
		fileInfo << nombreArchivo << " " << hash << " " << fechaModificacion;
		return fileInfo.str();
	}

};

#endif
